package cn.sccdlg.webmagic.test;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.scheduler.BloomFilterDuplicateRemover;
import us.codecraft.webmagic.scheduler.QueueScheduler;
import us.codecraft.webmagic.scheduler.Scheduler;

/**
 * @author RaoShuang
 * @emil 991207823@qq.com
 * @date 2020/11/29 22:12
 * WebMagic之url去重（默认使用QueueScheduler）
 *  抓取淘宝首页信息
 */
public class JobProcessor3 implements PageProcessor {

    /**
     * 解析页面
     * @param page
     */
    public void process(Page page) {
        //解析返回的数据page，并把解析的结果放入到ResultItems中

        // 三次相同的超链接。实际请求只会执行一个（这就是已经实现了去重）
        page.addTargetRequests(page.getHtml().css("div.search-hots-lines div a").links()
                .regex(".*q=连衣裙.*").all());
        page.addTargetRequests(page.getHtml().css("div.search-hots-lines div a").links()
                .regex(".*q=连衣裙.*").all());
        page.addTargetRequests(page.getHtml().css("div.search-hots-lines div a").links()
                .regex(".*q=连衣裙.*").all());
    }

    private Site site = Site.me()
            .setCharset("UTF-8") //设置编码
            .setTimeOut(10000)   // 设置超时时间，单位毫秒
            .setRetrySleepTime(3000) // 设置重试的间隔时间
            .setSleepTime(3)     // 设置抓取间隔时间
            .setRetryTimes(3);   // 设置重试次数

    public Site getSite() {
        return site;
    }

    /**
     * 主函数，执行爬虫
     */
    public static void main(String[] args) {
        Spider spider = Spider.create(new JobProcessor3())
                //设置爬取数据的url
                .addUrl("https://www.taobao.com/")
                //设置5个线程处理
                .thread(5)
                //设置布隆去重过滤器，指定最多对1000万数据进行去重操作
                .setScheduler(new QueueScheduler().setDuplicateRemover(new BloomFilterDuplicateRemover(10000000)));
        Scheduler scheduler = spider.getScheduler();
        System.out.println(scheduler.toString());
        //执行爬虫
        spider.run();
    }
}
